package com.shine.minepressure.ui.chart;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.fragment.app.Fragment;

import com.shine.minepressure.R;

import java.util.ArrayList;
import java.util.List;

import lecho.lib.hellocharts.model.Line;
import lecho.lib.hellocharts.model.LineChartData;
import lecho.lib.hellocharts.model.PointValue;
import lecho.lib.hellocharts.model.Viewport;
import lecho.lib.hellocharts.util.ChartUtils;
import lecho.lib.hellocharts.view.LineChartView;

public class GoodBadChartFragment extends Fragment {

    private LineChartView chart;
    private LineChartData data;

    public GoodBadChartFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_good_bad, container, false);

        chart = (LineChartView) rootView.findViewById(R.id.chart);

        generateDefaultData();
        chart.setLineChartData(data);

        // Increase viewport height for better look
        Viewport v = chart.getMaximumViewport();
        float dy = v.height() * 0.2f;
        v.inset(0, -dy);
        chart.setMaximumViewport(v);
        chart.setCurrentViewport(v);

        return rootView;
    }

    private void generateDefaultData() {

        // Generate data, every line has 3 points to form filled triangle. Point radius is set to 1 to be almost
        // invisible but it has to be there because without points there is not labels. Area transparency is set to
        // 255(full opacity).

        // Important note. This example uses negative values, to properly fill area below 0 chart base value have to
        // be set to 0. That is default base value but if you want to be sure you can call data.setBaseValue(0)
        // method.

        Line line;
        List<PointValue> values;
        List<Line> lines = new ArrayList<Line>();

        // First good triangle
        values = new ArrayList<PointValue>();
        values.add(new PointValue(0, 0).setLabel("".toCharArray()));
        values.add(new PointValue(1, 1).setLabel("Very Good:)".toCharArray()));
        values.add(new PointValue(2, 0).setLabel("".toCharArray()));

        line = new Line(values);
        line.setColor(ChartUtils.COLOR_GREEN);
        line.setAreaTransparency(255);
        line.setFilled(true);
        line.setPointRadius(1);
        line.setHasLabels(true);
        lines.add(line);

        // Second good triangle
        values = new ArrayList<PointValue>();
        values.add(new PointValue(3, 0).setLabel("".toCharArray()));
        values.add(new PointValue(4, 0.5f).setLabel("Good Enough".toCharArray()));
        values.add(new PointValue(5, 0).setLabel("".toCharArray()));

        line = new Line(values);
        line.setColor(ChartUtils.COLOR_GREEN);
        line.setAreaTransparency(255);
        line.setFilled(true);
        line.setPointRadius(1);
        line.setHasLabels(true);
        lines.add(line);

        // Bad triangle
        values = new ArrayList<PointValue>();
        values.add(new PointValue(1, 0).setLabel("".toCharArray()));
        values.add(new PointValue(2, -1).setLabel("Very Bad".toCharArray()));
        values.add(new PointValue(3, 0).setLabel("".toCharArray()));

        line = new Line(values);
        line.setColor(ChartUtils.COLOR_RED);
        line.setAreaTransparency(255);
        line.setFilled(true);
        line.setPointRadius(1);
        line.setHasLabels(true);
        lines.add(line);

        data = new LineChartData(lines);

        // *** Important, set base value to 0 to fill negative part of chart.
        // data.setBaseValue(0);

    }
}
